package com.day1012.morning;

import java.lang.reflect.Constructor;
import java.util.HashMap;
import java.util.Map;

public class MainText {
    public static void main(String[] args) throws Exception {
        Map<Integer,String> map = new HashMap<>();
        map.put(1,"public");
        map.put(2,"private");
        map.put(3,"protected");
        Student student = new Student("1001","张三",18);
        student.getStu_name();
        //   类信息  获取属性名和方法名和构造
        //   Java 的反射就是获取类信息（构造，属性，方法）
        //   所有的类信息保存在Class类中
        //   获取Class对象，三种方法
        //  第一种方法
        Class cla = Class.forName("com.day1012.morning.Student");
        //  第二种方法
        Class clas = Student.class;
        //   第三种方法  所有的对象都有一个getClass方法
        Class aClass = student.getClass();
        //  获取构造方法
        Constructor[] constructors = cla.getConstructors();
        for (Constructor constructor : constructors) {
            //  访问权限  1表示public  2表示 private  4表示protected
            //  只能获取公共的构造方法
            //System.out.println("访问权限：" + constructor.getModifiers());
            System.out.print(map.get(constructor.getModifiers()) + " ");
            int index = constructor.getName().lastIndexOf(".");
            System.out.print(constructor.getName().substring(index+1) + "(");  //构造名  方法名
            Class[] con = constructor.getParameterTypes();//  参数类型
            for (Class c : con) {
                System.out.print(c.getName()+ " ");
            }
            System.out.println("){");
            System.out.println("}");
            if (constructor.getParameterTypes().length == 0){
                Student stu = (Student) constructor.newInstance();
                System.out.println(stu);
            }
            if (constructor.getParameterTypes().length != 0){
                Student stu1 = (Student) constructor.newInstance("1002","李四",20);
                System.out.println(stu1);
            }

        }

    }
}
